package org.sky.util.result;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.StringUtils;

/**
 * @author weifx
 * @Title: Result
 * @ProjectName springboot-platform
 * @Description: TODO{Http返回值的封装}
 * @date 2019/2/25 18:04
 * @Version 1.0
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain=true)
public class Result<T> {
    /**
     * 执行成功返回操作代码
     */
    public final static Integer SUCCESS_CODE=1;
    /**
     * 执行成功返回提示信息
     */
    public final static String SUCCESS_MSG="执行成功";
    /**
     *执行失败返回操作代码
     */
    public final static Integer ERROR_CODE=0;
    /**
     * 执行失败返回提示信息
     */
    public final static String  ERROR_MSG="执行失败";
    /**
     * 执行请求返回代码
     */
    private Integer code;
    /**
     * 执行请求返回提示信息
     */
    private String msg;
    /**
     * 执行请求返回详细信息
     */
    private String desc;
    /**
     * 执行请求返回对象
     */
    private T data;
    /**
     * 创建执行成功返回对象
     * @return
     */
    public static Result success(){
        Result result = new Result();
        result.setCode(Result.SUCCESS_CODE);
        result.setMsg(Result.SUCCESS_MSG);
        return result;
    }
    /**
     * 创建执行成功返回对象
     * @param msg{操作成功提示信息}
     * @return
     */
    public static Result success(String msg){
        return success(msg,null,null);
    }
    /**
     * 创建执行成功返回对象
     * @param msg{操作成功提示信息}
     * @param desc{操作成功详细信息}
     * @param obj{操作成功返回对象}
     * @return
     */
    public static Result success(String msg,String desc,Object obj){
        Result result = new Result();
        result.setCode(Result.SUCCESS_CODE);
        if(!StringUtils.isEmpty(msg)){
            result.setMsg(msg);
        }else{
            result.setMsg(Result.SUCCESS_MSG);
        }
        if(!StringUtils.isEmpty(desc)){
            result.setDesc(desc);
        }
        if(null!=obj){
            result.setData(obj);
        }
        return result;
    }
    /**
     * 创建执行失败返回对象
     * @return
     */
    public static Result error(){
        Result result = new Result();
        result.setCode(Result.ERROR_CODE);
        result.setMsg(Result.ERROR_MSG);
        return result;
    }
    /**
     * 创建执行失败返回对象
     * @param msg{操作失败提示信息}
     * @param desc{操作失败详细信息}
     * @return
     */
    public static Result error(String msg,String desc){
        return error(msg,desc,null);
    }
    /**
     * 创建执行失败返回对象
     * @param msg{操作失败提示信息}
     * @param desc{操作失败详细信息}
     * @param obj{操作失败返回对象}
     * @return
     */
    public static Result error(String msg,String desc,Object obj){
        Result result = new Result();
        result.setCode(Result.ERROR_CODE);
        if(!StringUtils.isEmpty(msg)){
            result.setMsg(msg);
        }else{
            result.setMsg(Result.ERROR_MSG);
        }
        if(!StringUtils.isEmpty(desc)){
            result.setDesc(desc);
        }
        if(null!=obj){
            result.setData(obj);
        }
        return result;
    }
}
